#ifndef DMAKEMOTECDRIVE_H
#define DMAKEMOTECDRIVE_H

#include "forkliftdrive.h"
#include <QObject>

class DmakeMotecDrive : public ForkliftDrive {

public:
    explicit DmakeMotecDrive( QObject* parent = nullptr );
    bool CanRecviveData() override;                                                                    //处理can接收的数据
    void RegularGetData() override;                                                                    //定期获取can数据
    void CanSetSpeedAngle( double walk_speed, double veer_rad ) override;                              //外部设定行走速度值, 转角弧度值
    void CanDataFrameSetKDSData( CanDataFrame& frame, short& speed, uchar& kdsRise, uchar& kdsFall );  //发送柯蒂斯行走升降
    void CanDataFrameSetForkRaiseSpeed( CanDataFrame& frame, uchar value );                            //上升电磁阀速度 id222 0~255

    void CanDataFrameControlByte3F( CanDataFrame& frame, BYTE drive_id );                     // 伺服电机使能控制字3F
    void CanDataFrameControlByte0F( CanDataFrame& frame, BYTE drive_id );                     // 伺服电机使能控制字0F
    void CanDataFrameSetPoModePosValue( CanDataFrame& frame, BYTE drive_id, long value );     // 伺服电机设置位置模式下的位置值
    void CanDataFrameGetCurPoseValue( CanDataFrame& frame, BYTE drive_id );                   // 伺服电机获取当前位置
    void CanDataFrameOperationalMode( CanDataFrame& frame, BYTE value );                      // 伺服电机设置操作模式
    void CanDataFramePositionMode( CanDataFrame& frame, BYTE drive_id );                      // 伺服电机设置位置模式
    void CanDataFrameSetPosModeSpeedValue( CanDataFrame& frame, BYTE drive_id, long value );  // 伺服电机设置位置模式下的速度值
    void CanDataFrameAcce( CanDataFrame& frame, BYTE drive_id, long value );                  // 伺服电机设置加速度
    void CanDataFrameDece( CanDataFrame& frame, BYTE drive_id, long value );                  // 伺服电机设置减速度
    double Veer_Wheel_Speed_Reduction_Radio = 0;

public slots:
    void sltForkLiftDrive_Init() override;

private:
    BYTE enable_mode_3F[ 8 ]                      = { 0x2B, 0x40, 0x60, 0x00, 0x3F, 0x00, 0x00, 0x00 };  // 设置伺服软件使能3F
    BYTE enable_mode_0F[ 8 ]                      = { 0x2B, 0x40, 0x60, 0x00, 0x0F, 0x00, 0x00, 0x00 };  // 设置伺服软件使能0F--使能驱动器
    BYTE set_drive_position_mode_pos_value[ 4 ]   = { 0x23, 0x7A, 0x60, 0x00 };                          // 设定位置模式下的位置值
    BYTE can_operation_enable                     = 0x01;                                                // 伺服can操作模式使能
    BYTE can_operation_disable                    = 0x02;                                                // 伺服can操作模式失能
    BYTE turn_drive_id                            = 0x02;
    BYTE position_mode[ 8 ]                       = { 0x2F, 0x60, 0x60, 0x00, 0x01, 0x00, 0x00, 0x00 };  // 设置伺服位置模式
    BYTE set_drive_position_mode_speed_value[ 4 ] = { 0x23, 0x81, 0x60, 0x00 };                          // 设定位置模式下的速度值
    BYTE set_drive_accec[ 4 ]                     = { 0x23, 0x83, 0x60, 0x00 };                          // 设定加速度
    BYTE set_drive_dece[ 4 ]                      = { 0x23, 0x84, 0x60, 0x00 };                          // 设定减速度
    BYTE get_cur_pos[ 8 ]                         = { 0x40, 0x64, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00 };  // 获取伺服位置
};

#endif  // DMAKEMOTECDRIVE_H
